Embodiments disclosed herein relate to encoding raw data in a data stream. More specifically, embodiments disclosed herein relate to techniques to reduce disparity of encoded data in high speed serial links.
Computer fabric interconnections often involve a collection of high-speed serial links. Raw (or uncoded) data is not transmitted on these links because the characteristics of a raw data serial bit stream are not conducive to the electronics involved. Important characteristics of an optimal serial bit stream include: (i) an adequate transition density, (ii) good direct current (DC) balance, and (iii) randomness of the data. Raw data typically goes through a “data coding” stage prior to transmission, thereby modifying it in a predictable fashion in order to achieve these desired characteristics.
Modern solutions to reduce the risk of baseline wander (also known as DC imbalance) were moderately successful, but did not eliminate large swings in running disparity (i.e., baseline wander calculated over a period of time). Disparity is a term used to identify the numeric difference between the number of zeroes and ones in a bit stream. Different primitive polynomials may be used to encode raw data, but each may produce different baseline wander, especially when the raw data is comprised of constant data values. PCIe 3.0 attempted to fix this problem by choosing a primitive polynomial that did not include peaks or valleys in the baseline wander graph. This solution reduced the risk of baseline wander moderately, but did not totally eliminate the large swings in the running disparity. The 64B/67B encoding method (called the Interlaken Protocol) solved this problem by adding an additional bit transmitted with each word to indicate whether that word was inverted prior to transmission. However, while this solution effectively reduces baseline wander, it does so at the expense of bandwidth, as an extra bit must be transmitted with each word.